import { response } from "@/utils/response.js";
import { pwd } from "@/data_base/models/pwd.js";
import { Op } from "sequelize";

/**
 * 添加密码记录
 * @param {Object} data - 密码数据对象
 * @returns {Promise<Object>} - 返回响应对象，包含状态码、数据和消息
 */
const add_pwd = async data => {
	try {
		// 使用 create 方法向 pwd 表添加数据
		const new_record = await pwd.create(data);
		return response(200, new_record.toJSON(), "添加密码成功！");
	} catch (error) {
		return response(500, null, "添加密码失败，请联系管理员或稍后重试！");
	}
};

/**
 * 查询所有密码记录
 * @returns {Promise<Object>} - 返回响应对象，包含状态码、数据列表和消息
 */
const get_pwd_all = async () => {
	try {
		// 使用 findAll 方法获取所有密码记录
		const records = await pwd.findAll();
		return response(200, records, "获取密码列表成功！");
	} catch (error) {
		return response(500, null, "获取密码列表失败！");
	}
};

/**
 * 模糊查询密码记录（全字段匹配）
 * @param {string} keyword - 要查询的关键词
 * @returns {Promise<Object>} - 返回响应对象，包含状态码、数据列表和消息
 */
const fuzzy_query_pwds = async keyword => {
	try {
		const records = await pwd.findAll({
			where: {
				[Op.or]: [
					{ title: { [Op.like]: `%${keyword}%` } },
					{ url: { [Op.like]: `%${keyword}%` } },
					{ name: { [Op.like]: `%${keyword}%` } },
					{ remark: { [Op.like]: `%${keyword}%` } },
				],
			},
		});
		if (records.length) {
			return response(200, records, "获取密码列表成功！");
		} else {
			return response(200, [], "没有搜索到相关数据！");
		}
	} catch (error) {
		return response(500, null, "获取密码列表失败！");
	}
};

/**
 * 根据ID删除密码记录
 * @param {number} id - 要删除的记录ID
 * @returns {Promise<Object>} - 返回响应对象，包含状态码和消息
 */
const delete_pwd_by_id = async (id) => {
    try {
        const result = await pwd.destroy({
            where: { id }
        });
        
        if (result === 1) {
            return response(200, null, "删除成功！");
        } else {
            return response(404, null, "未找到对应记录！");
        }
    } catch (error) {
        return response(500, null, "删除失败！");
    }
};

/**
 * 根据ID修改密码记录（先查询再更新）
 * @param {number} id - 要修改的记录ID
 * @param {Object} data - 包含要更新的字段的对象
 * @returns {Promise<Object>} - 返回响应对象，包含状态码、数据和消息
 */
const update_pwd_by_id = async (id, data) => {
    try {
        // 先查询记录是否存在
        const record = await pwd.findByPk(id);
        if (!record) {
            return response(404, null, "未找到对应记录！");
        }
        // 更新记录
        await record.update(data);
        // 返回更新后的完整记录
        return response(200, record.toJSON(), "修改成功！");
    } catch (error) {
        return response(500, null, "修改失败！");
    }
};

export { add_pwd, get_pwd_all, fuzzy_query_pwds, delete_pwd_by_id, update_pwd_by_id };